#ifndef MAINWINDOW_H
#define MAINWINDOW_H

#include <QMainWindow>

#include "QAbstractSocket"

class QLabel;
class QTcpServer;
class QTcpSocket;

QT_BEGIN_NAMESPACE
namespace Ui
{
    class MainWindow;
}
QT_END_NAMESPACE

class MainWindow : public QMainWindow
{
    Q_OBJECT

public:
    MainWindow(QWidget* parent = nullptr);

    /**
     * @brief 析构函数
     */
    ~MainWindow();

private:
    Ui::MainWindow* ui;

private:
    QLabel* labListen;               // 状态栏标签
    QLabel* labSocketState;          // 状态栏标签
    QTcpServer* tcpServer;           // TCP 服务器
    QTcpSocket* tcpSocket = nullptr; // TCP 通信的 socket
private:
    /**
     * @brief 获取本机 IPv4 地址
     * @return 本机 IPv4 地址 点分十进制字符串
     */
    QString getLocalIPv4(void);

    /**
     * @brief 客户端接入时
     */
    void do_clientConnected(void);

    /**
     * @brief 客户端断开连接时
     */
    void do_clientDisconnected(void);

    /**
     * @brief socket 状态变化时
     * @param socketState socket 状态
     */
    void do_socketStateChanged(QAbstractSocket::SocketState socketState);

    /**
     * @brief 当有客户端接入
     */
    void do_newConnection(void);

    /**
     * @brief 读取缓冲区的行文本
     */
    void do_socketReadyRead(void);
};
#endif // MAINWINDOW_H













































